perm filename COR11.PAL[SYS,HE] blob sn#142396 filedate 1975-02-07 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	.SBTTL	PDP-11 correlation routine to simulate SPS-41
C00005 00003		save parameters for first window
C00007 00004	
C00008 ENDMK
CāŠ—;
.SBTTL	PDP-11 correlation routine to simulate SPS-41

;	save variables for windows

WIN1:	0		;starting address of window
WIN2:	0
SCHR1:	0		;starting byte of window (0-3)
SCHR2:	0
INC1:	0		;byte increment to start of next line
INC2:	0
CNTLIN:	0		;number of bytes per line of window
TOTAL:	0		;number of bytes in window

;	run variables

SPSDON:	0		;dummy flag for SPS
SCR:	0		;score accumulated here
LCNTR:	0		;count left in current line
TCNTR:	0		;count left in current window
STR1:	0		;address of start of current line
STR2:	0
AD1:	0		;address of current byte
AD2:	0
CHR1:	0		;current byte number
CHR2:	0
VAL1:	0		;contents of current byte
VAL2:	0
PARAMX:	0		;pointer to parameter address
SAVR5:	0		;save return pointer

.MACRO	GETBYT ADR,POS,STR
	MOV ADR,A	;macro to get the current byte - pick up address
	MOV (A),B	;	get word containing byte
	MOV POS,LENG	;	get byte position
	SUB #3,LENG	;	calculate proper shift
	MUL #4,LENG
	ASHC LENG,B	;	right justify byte
	BIC #177760,B	;	clear rest of word
	MOV B,STR	;	and store byte
.ENDM

.MACRO	NXTBYT ADR,POS,LAB
	INC POS		;macro to update byte pointers - increment position
	CMP #4,POS	;	test for end of current word
	BHI LAB
	CLR POS		;	end - clear position
	ADD #2,ADR	;		and update word pointer
LAB:
.ENDM
;	save parameters for first window

FSTWIN:	MOV (R5)+,A
	ASL A
	MOV (A)+,WIN1
	ASL WIN1
	MOV (A)+,SCHR1
	MOV (A)+,INC1
	ASL INC1
	MOV (A)+,CNTLIN
	MOV (A)+,TOTAL
	RTS R5

;	correlate first window with current window

NXTWIN:	MOV (R5)+,A		; save parameters for this window
	MOV R5,SAVR5
	ASL A
	MOV A,PARAMX		;	save pointer to return score
	MOV (A)+,WIN2
	ASL WIN2
	MOV (A)+,SCHR2
	MOV (A)+,INC2
	ASL INC2
	CLR SCR			; initialize for outer loop
	MOV WIN1,STR1
	MOV WIN2,STR2
	MOV TOTAL,TCNTR
LNLOP:	MOV STR1,AD1		; setup for start of line
	MOV STR2,AD2
	MOV SCHR1,CHR1
	MOV SCHR2,CHR2
	MOV CNTLIN,LCNTR
CHRLOP:	GETBYT AD1,CHR1,VAL1	; get next byte of each window
	GETBYT AD2,CHR2,VAL2
	MOV VAL1,LENG		; update sum of squares of differences
	SUB VAL2,LENG
	MUL LENG,LENG
	ADD LENG,SCR
	NXTBYT AD1,CHR1,L1X	; update byte pointers
	NXTBYT AD2,CHR2,L2X
	DEC TCNTR		; test for end of window
	BLE GOUT
	DEC LCNTR		; test for end of line
	BGT CHRLOP
	ADD INC1,STR1		; update line address for next line
	ADD INC2,STR2
	BR LNLOP

GOUT:	MOV PARAMX,A		; save score
	MOV SCR,-(A)
;	NUMDEC SCR		; type score
;	CRLF
	MOV SAVR5,R5
	RTS R5

GRONK:	RTS PC